import { ApiProp } from "src/decorator/swagger";
import { classDto2Zod } from "src/utils";
import { z } from "zod";

/** 统计信息/性能指标 */
export class PerformanceDto {
  @ApiProp({ desc: 'id标识', zodType: z.number().int() })
  id!: number

  @ApiProp({ desc: '创建时间', zodType: z.date().or(z.string())
    .transform(date => (Object.prototype.toString.call(date)==='[object Date]') ? date: new Date(date) )
  })
  createTime!: Date

  @ApiProp({ desc: '更新时间', zodType: z.date().or(z.string())
    .transform(date => (Object.prototype.toString.call(date)==='[object Date]') ? date: new Date(date) )
  })
  updateTime!: Date

  @ApiProp({ desc: '用户账号', required: false, })
  account!: string

  @ApiProp({ desc: '当前标签页标识' })
  tabFlag!: string

  @ApiProp({ desc: '设备指纹' })
  fingerPrint!: string

  @ApiProp({ desc: '项目标识', zodType: z.number().int() })
  projectFlag!: number
  
  @ApiProp({ desc: '日志细分类型', zodType: z.number().int() })
  logType!: number

  @ApiProp({ desc: '首次渲染时间', zodType: z.number().int() })
  FP!: number

  @ApiProp({ desc: '首次内容渲染时间', zodType: z.number().int() })
  FCP!: number

  @ApiProp({ desc: '设备名称' })
  deviceName!: string

  @ApiProp({ desc: '设备版本号' })
  deviceVersion!: string

  @ApiProp({ desc: '浏览器名称' })
  browser!: string

  @ApiProp({ desc: '浏览器版本' })
  browserVersion!: string
}

/** 统计信息/性能指标 */
export const PerformanceZod = classDto2Zod(PerformanceDto);
